home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / bbs / mxu_v152.zip / WFC.PAS < prev    next >
Pascal/Delphi Source File  |  1997-06-01  |  13KB  |  406 lines

  1. {
  2. ───────────────────────────────────────────────────────────────────────────────
  3.   ▀▀▀   ▀▀▀   ▀▀▀▀▀   ▀▀   ▀▀
  4.   ▀▀▀▀ ▀▀▀▀  ▀▀   ▀▀   ▀▀ ▀▀
  5.   ▀▀ ▀▀▀ ▀▀  ▀▀▀▀▀▀▀    ▀▀▀    ╔══ ╦═╗ ╔═╗ ╦═╗ ╦ ╦ ╦ ╔═╗ ╔═╗
  6.   ▀▀  ▀  ▀▀  ▀▀   ▀▀   ▀▀ ▀▀   ║ ╦ ╠╦╝ ╠═╣ ╠═╝ ╠═╣ ║ ║   ╚═╗
  7.   ▀▀     ▀▀  ▀▀   ▀▀  ▀▀   ▀▀  ╚═╝ ╩╚═ ╩ ╩ ╩   ╩ ╩ ╩ ╚═╝ ╚═╝
  8. ───────────────────────────────────────────────────────────────────────────────
  9.   The Universal Multimedia Interface For BBS Software
  10.   Copyright 1995-Current * Larry L. Athey * BBS Utiliteez Software
  11. ───────────────────────────────────────────────────────────────────────────────
  12.  
  13.   Information Regarding MAX Graphics:
  14.   ───────────────────────────────────
  15.   Notice is hereby given that the MAXscript/MAXcontrol/MAXcolor language,
  16.   and MAXterm are products of BBS Utiliteez Software and are protected by
  17.   US copyrights listed with the US Library Of Congress (1996)....
  18.  
  19.   No changes, additions, subtractions, or other modifications shall be made
  20.   to MAXscript/MAXcontrol/MAXcolor language or the MAX Graphics development
  21.   kit without express written permission from Larry L. Athey, BBS Utiliteez
  22.   Software, Alliance, Nebraska, USA....
  23.  
  24.   The MAXscript/MAXcontrol/MAXcolor language may be used in any BBS or Door
  25.   software 100% royalty free. You are also allowed to implement full local
  26.   graphics viewing in any BBS or Door software 100% royalty free. However,
  27.   any program that uses the MAXscript/MAXcontrol/MAXcolor language *MUST*
  28.   bear the MAX Graphics/BBS Utiliteez Software copyright notice....
  29.  
  30.  
  31.   Example: MAX Graphics and the MAXscript/MAXcontrol/MAXcolor language is
  32.              (C) 1995-Current * Larry L. Athey * BBS Utiliteez Software
  33.  
  34. ───────────────────────────────────────────────────────────────────────────────
  35. NOTE: This door requires Async Professional for DOS before you can
  36.       compile it.}
  37.  
  38. {$A+,B-,D+,E+,F+,G+,I-,L+,N-,O+,P-,Q-,R-,S-,T-,V+,X+}
  39. PROGRAM WFC;
  40.  
  41. USES CRT, DOS, __TEXT, TDK_VARS, DOORKIT1,
  42.      DOORKIT2, DOORKIT3, APVARS, PORTUNIT;
  43.  
  44. VAR
  45.   MinBaud   : STRING[6];
  46.   UserTime  : STRING[4];
  47.   NodeStr   : STRING[3];
  48.   BaudStr   : STRING;
  49.   WorkPath  : STRING;
  50.   HomeDir   : STRING;
  51.   Scrn      : ARRAY[1..11] OF STRING[33];
  52.  
  53. PROCEDURE UpdateArray(St : STRING);
  54. VAR
  55.   X : BYTE;
  56.   S : STRING;
  57. BEGIN
  58.   S := '';
  59.   IF (St = #13) OR (St = #10) THEN EXIT;
  60.   FOR X := 1 TO LENGTH(St) DO IF St[X] > #31 THEN S := S + St[X];
  61.   FOR X := 1 TO 10 DO Scrn[X] := Scrn[X + 1];
  62.   Scrn[11] := PadRight(S,' ',33);
  63.   FOR X := 1 TO 11 DO OutTextXY(44,4 + X,7,0,Scrn[X]);
  64. END;
  65.  
  66. PROCEDURE NewDefaults;
  67. BEGIN
  68.   CS.CPBfg := 3;
  69.   CS.CPBbg := 1;
  70.   CS.CPKfg := 14;
  71.   CS.CPKbg := 1;
  72.   CS.CPTfg := 11;
  73.   CS.CPTbg := 1;
  74. END;
  75.  
  76. PROCEDURE SetUpScreen;
  77. BEGIN
  78.   FILLCHAR(Scrn,SIZEOF(Scrn),0);
  79.   MemW[$0000 : $041C] := MemW[$0000 : $041A];
  80.   DrawWindow(1,1,80,25,'WFC.EXE - Waiting For Caller Unit');
  81.   InvertedBox(43,4,77,16);
  82.   OutTextXY(44,4,15,9,' Modem Results                   ');
  83.   WINDOW(44,5,76,15);
  84.   TEXTCOLOR(3); TEXTBACKGROUND(0); CLRSCR;
  85.   WINDOW(1,1,80,25);
  86.   InvertedBox(4,4,40,16);
  87.   OutTextXY(5,4,15,9, ' SysOp Function Keys               ');
  88.   InvertedBox(4,18,77,23);
  89.   MenuKey(7,6,'A',' Manual Answer');
  90.   MenuKey(7,7,'I',' Initialize Modem');
  91.   MenuKey(7,8,'M',' MAXupdate CTL Editor');
  92.   MenuKey(7,9,'L',' Local Logon');
  93.   MenuKey(7,10,'V',' View Activity Log');
  94.   MenuKey(7,11,'D',' Shell To DOS');
  95.   MenuKey(7,12,'X',' Exit With Modem Busy');
  96.   MenuKey(7,13,'Q',' Quit With Modem Ready');
  97.   HideCursor;
  98.   OutTextXY(5,18,15,9,' Miscellaneous Information                                              ');
  99.   OutTextXY(7,19,11,1,ProgramName);
  100.   OutTextXY(7,20,11,1,ProgramDesc);
  101.   OutTextXY(7,21,11,1,'Running Under ' + OsStr);
  102.   OutTextXY(53,19,14,1,'Free Memory:');
  103.   OutTextXY(66,19,15,1,IntToStr(MEMAVAIL));
  104.   OutTextXY(60,20,14,1,'Node:');
  105.   OutTextXY(66,20,15,1,IntToStr(DoorSys.Node));
  106.   OutTextXY(60,21,14,1,'Date:');
  107.   OutTextXY(66,21,15,1,DateVariable);
  108.   OutTextXY(60,22,14,1,'Time:');
  109.   IF Ctl.UseFossil THEN CommDef.Device := 2 ELSE CommDef.Device := 1;
  110.   IF Ctl.UseDigi THEN CommDef.Device := 3;
  111.   IF Ctl.NSP THEN CommDef.PortAddr := Ctl.HexAddr ELSE CommDef.PortAddr := '0';
  112.   IF Ctl.NSP THEN CommDef.IRQ := Ctl.IRQ ELSE CommDef.IRQ := 0;
  113.   IF Ctl.PortSpeed < 9600 THEN CommDef.HwFlow := FALSE ELSE CommDef.HwFlow := TRUE;
  114.   CommDef.Baud       := Ctl.PortSpeed;
  115.   CommDef.Port       := Ctl.Port;
  116.   CommDef.In_Buffer  := Ctl.InBuffer;
  117.   CommDef.Out_Buffer := Ctl.OutBuffer;
  118.   IF PortUnit.InitComport THEN UpdateArray('Comport Successfully Opened') ELSE BEGIN
  119.     UpdateArray('Cannot Open Comport!!');
  120.     AlertTones;
  121.     ShutDownText;
  122.     ErrorLog('Cannot Open Comport!!',1,TRUE);
  123.   END;
  124. END;
  125.  
  126. PROCEDURE InitTheModem;
  127. BEGIN
  128.   IF Modem.Init1 <> '' THEN BEGIN
  129.     ModemCommand(Modem.Init1);
  130.     UpdateArray(ModemResult);
  131.   END;
  132.   IF Modem.Init2 <> '' THEN BEGIN
  133.     ModemCommand(Modem.Init2);
  134.     UpdateArray(ModemResult);
  135.   END;
  136. END;
  137.  
  138. PROCEDURE AnswerCall;
  139. VAR
  140.   RC    : STRING[80];
  141.   Ch    : CHAR;
  142.   C     : CHAR;
  143.   Cnt   : BYTE;
  144.   S100  : WORD;
  145.   Sec   : WORD;
  146. BEGIN
  147.   Sec     := 0;
  148.   Cnt     := 0;
  149.   RC      := '';
  150.   BaudStr := '';
  151.   UpdateArray(Modem.Answer);
  152.   UpdateArray('Press Any Key To Hang Up');
  153.   ModemCommand(Modem.Answer);
  154.   REPEAT
  155.     WITH CurTime DO GETTIME(Hour,Min,Sec,S100);
  156.     IF Sec <> CurTime.Sec THEN BEGIN
  157.       Sec := CurTime.Sec;
  158.       INC(Cnt);
  159.     END;
  160.     IF KEYPRESSED THEN Cnt := 30;
  161.     IF DataAvailable THEN BEGIN
  162.       WHILE DataAvailable DO BEGIN
  163.         Ch := ReadChar;
  164.         IF Ch > #31 THEN RC := RC + Ch;
  165.       END;
  166.     END;
  167.     IF RC = 'CONNECT' THEN BaudStr := '300';
  168.     IF POS('CONNECT 1200',RC) > 0 THEN BaudStr := '1200';
  169.     IF POS('CONNECT 1275',RC) > 0 THEN BaudStr := '1275';
  170.     IF POS('CONNECT 2400',RC) > 0 THEN BaudStr := '2400';
  171.     IF POS('CONNECT 4800',RC) > 0 THEN BaudStr := '4800';
  172.     IF POS('CONNECT 7200',RC) > 0 THEN BaudStr := '7200';
  173.     IF POS('CONNECT 9600',RC) > 0 THEN BaudStr := '9600';
  174.     IF POS('CONNECT 12000',RC) > 0 THEN BaudStr := '12000';
  175.     IF POS('CONNECT 14400',RC) > 0 THEN BaudStr := '14400';
  176.     IF POS('CONNECT 16800',RC) > 0 THEN BaudStr := '16800';
  177.     IF POS('CONNECT 19200',RC) > 0 THEN BaudStr := '19200';
  178.     IF POS('CONNECT 21600',RC) > 0 THEN BaudStr := '21600';
  179.     IF POS('CONNECT 24000',RC) > 0 THEN BaudStr := '24000';
  180.     IF POS('CONNECT 26400',RC) > 0 THEN BaudStr := '26400';
  181.     IF POS('CONNECT 28800',RC) > 0 THEN BaudStr := '28800';
  182.     IF POS('CONNECT 31200',RC) > 0 THEN BaudStr := '31200';
  183.     IF POS('CONNECT 33600',RC) > 0 THEN BaudStr := '33600';
  184.   UNTIL (Cnt = 30) OR (Ch = #13) OR (Ch = #10);
  185.   IF (Cnt = 30) AND (POS('CONNECT',RC) = 0) THEN RC := 'NO CARRIER';
  186.   UpdateArray(RC);
  187.   SOUND(220);
  188.   DELAY(150);
  189.   NOSOUND;
  190.   Wait(2);
  191.   KillWindow;
  192.   ShutDownText;
  193.   DeInitComport;
  194.   IF StrToInt(BaudStr) >= StrToInT(MinBaud) THEN BEGIN
  195.     _Execute('MAKEDROP.EXE',' /N' + NodeStr + ' /S' + BaudStr + ' /M' + UserTime + ' /D=' + WorkPath);
  196.     _Execute('UP_DOOR.EXE',' /N' + NodeStr + ' /S' + BaudStr + ' /R=' + WorkPath + 'DORINFO1.DEF');
  197.     _RunBatFile('BBS.BAT ' + NodeStr + ' ' + BaudStr);
  198.   END;
  199.   FireUpText; HideMouse; HideCursor;
  200.   SetUpScreen;
  201.   Cnt := 0;
  202.   IF Carrier THEN REPEAT
  203.     INC(Cnt);
  204.     HangUp;
  205.     Wait(1);
  206.   UNTIL (NOT Carrier) OR (Cnt = 5);
  207.   InitTheModem;
  208. END;
  209.  
  210. PROCEDURE ShutDownWFC;
  211. BEGIN
  212.   DeInitComport;
  213.   KillWindow;
  214.   ShutDownText;
  215. END;
  216.  
  217. PROCEDURE ShowTime;
  218. VAR
  219.   Pm    : STRING[2];
  220.   MHour : BYTE;
  221. BEGIN
  222.   TimeSlice;
  223.   WITH CurTime DO BEGIN
  224.     IF (Hour IN [0..11]) THEN Pm := 'am' ELSE Pm := 'pm';
  225.     MHour := Hour;
  226.     IF MHour = 0 THEN MHour := 12;
  227.     IF MHour > 12 THEN DEC(MHour,12);
  228.     OutTextXY(66,22,15,1,PadLeft(IntToStr(MHour),'0',2) + ':' +
  229.                          PadLeft(IntToStr(Min),'0',2) + ':' +
  230.                          PadLeft(IntToStr(Sec),'0',2) + Pm);
  231.   END;
  232. END;
  233.  
  234. PROCEDURE WaitForCall;
  235. VAR
  236.   QuitProg : BOOLEAN;
  237.   Ch,X     : CHAR;
  238.   St       : STRING;
  239.   S100,Sec : WORD;
  240. BEGIN
  241.   QuitProg := FALSE;
  242.   REPEAT
  243.     St := '';
  244.     WITH CurTime DO GETTIME(Hour,Min,Sec,S100);
  245.     IF Sec <> CurTime.Sec THEN BEGIN
  246.       Sec := CurTime.Sec;
  247.       ShowTime;
  248.     END;
  249.     IF DataAvailable THEN BEGIN
  250.       St := '';
  251.       REPEAT
  252.         X := ReadChar;
  253.         IF X > #31 THEN St := St + X;
  254.       UNTIL NOT DataAvailable;
  255.       UpdateArray(St);
  256.       IF POS('RING',AllCaps(St)) > 0 THEN AnswerCall;
  257.     END;
  258.     Ch := #0;
  259.     IF KEYPRESSED THEN Ch := UPCASE(READKEY);
  260.     IF Ch <> #0 THEN CASE Ch OF
  261.       'A' : AnswerCall;
  262.       'I' : InitTheModem;
  263.       'M' : BEGIN
  264.               ModemCommand(Modem.OffHook);
  265.               ShutDownWFC;
  266.               _Execute('MAKECTL.EXE',' '+NodeStr);
  267.               FireUpText; HideMouse; HideCursor;
  268.               NewDefaults;
  269.               SetUpScreen;
  270.               ModemCommand(Modem.OnHook);
  271.               InitTheModem;
  272.             END;
  273.       'L' : BEGIN
  274.               ModemCommand(Modem.OffHook);
  275.               ShutDownWFC;
  276.               _Execute('UP_DOOR.EXE',' /L /N' + NodeStr);
  277.               FireUpText; HideMouse; HideCursor;
  278.               NewDefaults;
  279.               SetUpScreen;
  280.               ModemCommand(Modem.OnHook);
  281.               InitTheModem;
  282.             END;
  283.       'V' : BEGIN
  284.               ModemCommand(Modem.OffHook);
  285.               ShutDownWFC;
  286.               CS.CPBfg := 9;
  287.               CS.CPBbg := 0;
  288.               CS.CPKfg := 14;
  289.               CS.CPKbg := 0;
  290.               CS.CPTfg := 13;
  291.               CS.CPTbg := 0;
  292.               IF FExist(LogPath + LogFile) THEN ShowTextFile(LogPath + LogFile)
  293.                                            ELSE OutTxtXY(1,7,12,0,LogPath + LogFile + ' Not Found!');
  294.               FireUpText; HideMouse; HideCursor;
  295.               NewDefaults;
  296.               SetUpScreen;
  297.               ModemCommand(Modem.OnHook);
  298.               InitTheModem;
  299.             END;
  300.       'D' : BEGIN
  301.               ModemCommand(Modem.OffHook);
  302.               ShutDownWFC;
  303.               DosShell;
  304.               FireUpText; HideMouse; HideCursor;
  305.               NewDefaults;
  306.               SetUpScreen;
  307.               ModemCommand(Modem.OnHook);
  308.               InitTheModem;
  309.             END;
  310.       'X' : BEGIN
  311.               ModemCommand(Modem.OffHook);
  312.               ShutDownWFC;
  313.               QuitProg := TRUE;
  314.             END;
  315.       'Q' : BEGIN
  316.               ModemCommand(Modem.OnHook);
  317.               ShutDownWFC;
  318.               QuitProg := TRUE;
  319.             END;
  320.     END;
  321.   UNTIL QuitProg;
  322. END;
  323.  
  324. PROCEDURE StartUp;
  325. VAR
  326.   Cfg     : TEXT;
  327.   KeyFile : TEXT;
  328.   St      : STRING[4];
  329.   SName   : STRING[30];
  330.   KeyLine : STRING;
  331.   GoodKey : BOOLEAN;
  332. BEGIN
  333.   ShowProgramAd;
  334.   WRITELN;
  335.   DoorSys.Node := StrToInt(PARAMSTR(1));
  336.   NodeStr      := PARAMSTR(1);
  337.   ReadCTL;
  338.   GETDIR(0,HomeDir);
  339.   WorkPath := HomeDir + '\WORK' + NodeStr + '\';
  340.   MakeDir(WorkPath);
  341.   ASSIGN(Cfg,'WFC' + NodeStr + '.CFG');
  342.   IF NOT FExist('WFC' + NodeStr + '.CFG') THEN BEGIN
  343.     ShutDownText;
  344.     ShowProgramAd;
  345.     OutTxtXY(1,7,12,0,'CRITICAL ERROR - WFC' + NodeStr + '.CFG NOT FOUND!');
  346.     AlertTones;
  347.     DELAY(5000);
  348.     ErrorLog('CRITICAL ERROR - WFC' + NodeStr + '.CFG NOT FOUND!',6,TRUE);
  349.   END;
  350.   RESET(Cfg);
  351.   READLN(Cfg,Modem.Init1);
  352.   READLN(Cfg,Modem.Init2);
  353.   READLN(Cfg,Modem.Answer);
  354.   READLN(Cfg,St); CommDef.Command_Delay := StrToInt(St);
  355.   READLN(Cfg,MinBaud);
  356.   READLN(Cfg,UserTime);
  357.   CLOSE(Cfg);
  358.   Modem.OffHook := 'ATM0H1';
  359.   Modem.OnHook  := 'ATM1H0';
  360.   IF NOT FExist('UP_DOOR.CFG') THEN ErrorLog('CRITICAL ERROR: UP_DOOR.CFG IS MISSING!',6,TRUE);
  361.   ASSIGN(Cfg,'UP_DOOR.CFG');
  362.   RESET(Cfg);
  363.   READLN(Cfg);
  364.   READLN(Cfg);
  365.   READLN(Cfg);
  366.   READLN(Cfg);
  367.   READLN(Cfg);
  368.   READLN(Cfg,LogPath);
  369.   READLN(Cfg,LogFile);
  370.   CLOSE(Cfg);
  371.   LogPath := CvtVars(LogPath);
  372.   LogFile := CvtVars(LogFile);
  373.   CHDIR(HomeDir);
  374.   OutTxtL(11,0,'■ Running Under ' + OsStr);
  375.   IF Ctl.UseDigi THEN OutTxt(3,0,'■ Using DigiBoard Comm Routines.') ELSE BEGIN
  376.     IF Ctl.UseFossil THEN OutTxt(3,0,'■ Using Fossil Comm Routines.')
  377.                      ELSE OutTxt(3,0,'■ Using UART Comm Routines.');
  378.   END;
  379.   HideCursor;
  380.   Wait(2);
  381. END;
  382.  
  383. {============================================================================}
  384.  
  385. BEGIN
  386.   ProgramName := 'MAXupdate WFC Unit';
  387.   ProgramDesc := 'MAX Graphics Front End System';
  388.   FireUpText; HideMouse; HideCursor;
  389.   NewDefaults;
  390.   IF PARAMCOUNT < 1 THEN BEGIN
  391.     ShutDownText;
  392.     ShowProgramAd;
  393.     IceText('Syntax:',TRUE);
  394.     LineBar(1,0,7);
  395.     IceText('WFC.EXE [Node Number]',TRUE);
  396.     sGotoXY(1,24);
  397.     AnyKey;
  398.     ErrLevel := 1;
  399.     HALT(ErrLevel);
  400.   END;
  401.   StartUp;
  402.   SetUpScreen;
  403.   InitTheModem;
  404.   WaitForCall;
  405. END.
  406.